import time
import multiprocessing
import os


# 自定义一个进程类
class Worker(multiprocessing.Process):
     def run(self):
          print("进程id:", os.getpid(), "\t父进程id:", os.getppid())

# 线程1 向文件中写入数据
def write_file():
     with open("test.txt", "a") as f:
         while True:
            f.write("hello world\n")
            f.flush()
            time.sleep(0.5)

# 线程2 从文件中读取数据
def read_file():
     with open("test.txt", "r") as f:
         while True:
             time.sleep(0.1)
             print(f.read(1))

if __name__ == "__main__":
     for i in range(5):
          p = Worker()
          p.start()


     # 创建一个子进程用于写文件
     p1 = multiprocessing.Process(target=write_file, name=None, args=(), kwargs={},  daemon=None)
     # 创建一个子进程用于读文件
     p2 = multiprocessing.Process(target=read_file)
     # 启动子进程
     p1.start()
     # 启动子进程
     p2.start()


# name：获取进程名称。
# pid：获取进程号。
# daemon：判断或设置进程是否为守护进程。
# exitcode：获取子进程的退出状态码。
# start()：启动进程，调用传入 target 的对象。start() 只能被调用一次。
# run()：默认调用传入 target 的对象，如果子类化了 Process，可以重写此方法来自定义行为。
# join([timeout])：阻塞主进程，直到子进程结束或超时。timeout参数可选，意为阻塞多少秒。
# terminate()：强制终止子进程。
# kill()：杀死进程，与 terminate() 类似，但更彻底。
# is_alive()：检查进程是否仍在运行。
# os.getpid()：获取当前进程编号。
# os.getppid()：获取当前进程的父进程编号。